hvmloader: Fix e820_collapse() to not lose E820 entries.
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Tue, 24 Apr 2007 09:34:47 +0000 (10:34 +0100)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Tue, 24 Apr 2007 09:34:47 +0000 (10:34 +0100)
Fixes bugzilla bug #971.
Signed-off-by: Keir Fraser <keir@xensource.com>
tools/firmware/hvmloader/util.c

index 940f6f0598cc384fa01def2573965f6f40ceb19d..b80788e838a748e11fd607b43909ab9fde7bca33 100644 (file)
@@ -295,7 +295,7 @@ static void e820_collapse(void)
              ((ent[i].addr + ent[i].size) == ent[i+1].addr) )
         {
             ent[i].size += ent[i+1].size;
-            memcpy(&ent[i+1], &ent[i+2], *E820_MAP_NR - i - 2);
+            memcpy(&ent[i+1], &ent[i+2], (*E820_MAP_NR-i-2) * sizeof(*ent));
             (*E820_MAP_NR)--;
         }
         else
@@ -322,10 +322,10 @@ uint32_t e820_malloc(uint32_t size)
              (addr != ent[i].addr) ||     /* starts above 4gb? */
              ((addr + size) < addr) )     /* ends above 4gb? */
             continue;
-        
+
         if ( ent[i].size != size )
         {
-            memmove(&ent[i+1], &ent[i], (*E820_MAP_NR - i) * sizeof(*ent));
+            memmove(&ent[i+1], &ent[i], (*E820_MAP_NR-i) * sizeof(*ent));
             (*E820_MAP_NR)++;
             ent[i].size -= size;
             addr += ent[i].size;